Creating new pipeline using seurat v4.0.2 available 2021.06.08

Load libraries required for Seuratv4

knitr::opts_knit$set(root.dir = "~/Desktop/10XGenomicsData/msAggr_scRNASeq/")
library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(Seurat)
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Attaching SeuratObject
library(patchwork)
library(ggplot2)
library(clustree)
Loading required package: ggraph

store session info

sink("msAggr_sct-v1.20210615")
sessionInfo()
sink()

A note about using SCTransform versus ScaleData

https://bioconductor.org/packages/3.10/workflows/vignettes/simpleSingleCell/inst/doc/batch.html#62_for_gene-based_analyses >You can also normalize and scale data for the RNA assay. There are numerous resources on this, but Aaron Lun describes why the original log-normalized values should be used for DE and visualizations of expression quite well here: > >For gene-based procedures like differential expression (DE) analyses or gene network construction, it is desirable to use the original log-expression values or counts. The corrected values are only used to obtain cell-level results such as clusters or trajectories. Batch effects are handled explicitly using blocking terms or via a meta-analysis across batches. We do not use the corrected values directly in gene-based analyses, for various reasons: > >It is usually inappropriate to perform DE analyses on batch-corrected values, due to the failure to model the uncertainty of the correction. This usually results in loss of type I error control, i.e., more false positives than expected. > >The correction does not preserve the mean-variance relationship. Applications of common DE methods like edgeR or limma are unlikely to be valid. > >Batch correction may (correctly) remove biological differences between batches in the course of mapping all cells onto a common coordinate system. Returning to the uncorrected expression values provides an opportunity for detecting such differences if they are of interest. Conversely, if the batch correction made a mistake, the use of the uncorrected expression values provides an important sanity check. > >In addition, the normalized values in SCT and integrated assays don’t necessary correspond to per-gene expression values anyway, rather containing residuals (in the case of the scale.data slot for each).

Load 4 populations into single seurat object

SET SEED?????!!!!!

Set global variables

projectName <- "msAggr_sct"
jackstraw.dim <- 40
source("msAggr_AnalysisCode/read_10XGenomics_data.R")
setwd("../cellRanger/") # temporarily changing wd only works if you run the entire chunk at once
Warning: The working directory was changed to /Users/heustonef/Desktop/10XGenomicsData/cellRanger inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
data_file.list <- read_10XGenomics_data(sample.list = c("LSKm2", "CMPm2", "MEPm", "GMPm"))
seurat.object.data<-Read10X(data_file.list)
seurat.object<- CreateSeuratObject(counts = seurat.object.data, min.cells = 3, min.genes = 200, project = projectName)

Clean up to free memory

remove(seurat.object.data)

Add mitochondrial metadata and plot some basic features

seurat.object[["percent.mt"]] <- PercentageFeatureSet(seurat.object, pattern = "^mt-")
VlnPlot(seurat.object, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), ncol = 3, pt.size = 0, fill.by = 'orig.ident', )

plot1 <- FeatureScatter(seurat.object, feature1 = "nCount_RNA", feature2 = "percent.mt", group.by = "orig.ident", pt.size = 0.01)
plot2 <- FeatureScatter(seurat.object, feature1 = "nCount_RNA", feature2 = "nFeature_RNA", group.by = "orig.ident", pt.size = 0.01)
plot1 + plot2

remove low quality cells ** require: nFeature_RNA between 200 and 4000 (inclusive) –require: percent.mt <5–???

** In previous run it’s possible that we’ll need to limit percent.mt because of MEPm weirdness. Will have to see if the additional 2000 MEPm cells found by cellranger v6

print(paste("original object:", nrow(seurat.object@meta.data), "cells", sep = " "))
[1] "original object: 40815 cells"
seurat.object <- subset(seurat.object, 
                                                subset = nFeature_RNA >=200 & 
                                                    nFeature_RNA <= 4000
                                                )
print(paste("new object:", nrow(seurat.object@meta.data), "cells", sep = " "))
[1] "new object: 40815 cells"
seurat.object <- PercentageFeatureSet(seurat.object, pattern = '^mt-', col.name = "percent.mt")

SCTransform

As previously mentioned, SCTransform() is best for batch correction, whereas NormalizeData(), ScaleData(), and FindVariableFeatures() are best for DGE. I’m struggling to make stable clusters, so I’m jumping ahead to SCTransform().
It does appear that SCTransform() data are stored in the SCT assay slot, which does not overwrite other normalization slots. It will become the default slot once populated.

seurat.object <- SCTransform(seurat.object, 
                                                         method = "glmGamPoi", 
                                                         vars.to.regress = c("nCount_RNA", "nFeature_RNA")
                                                         ) # method = "glmGamPoi" speeds process
Calculating cell attributes from input UMI matrix: log_umi
Variance stabilizing transformation of count matrix of size 17709 by 40815
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 5000 cells

  |                                                                                                                         
  |                                                                                                                   |   0%
  |                                                                                                                         
  |=============================                                                                                      |  25%
  |                                                                                                                         
  |==========================================================                                                         |  50%
  |                                                                                                                         
  |======================================================================================                             |  75%
  |                                                                                                                         
  |===================================================================================================================| 100%
Found 108 outliers - those will be ignored in fitting/regularization step

Second step: Get residuals using fitted parameters for 17709 genes

  |                                                                                                                         
  |                                                                                                                   |   0%
  |                                                                                                                         
  |===                                                                                                                |   3%
  |                                                                                                                         
  |======                                                                                                             |   6%
  |                                                                                                                         
  |==========                                                                                                         |   8%
  |                                                                                                                         
  |=============                                                                                                      |  11%
  |                                                                                                                         
  |================                                                                                                   |  14%
  |                                                                                                                         
  |===================                                                                                                |  17%
  |                                                                                                                         
  |======================                                                                                             |  19%
  |                                                                                                                         
  |==========================                                                                                         |  22%
  |                                                                                                                         
  |=============================                                                                                      |  25%
  |                                                                                                                         
  |================================                                                                                   |  28%
  |                                                                                                                         
  |===================================                                                                                |  31%
  |                                                                                                                         
  |======================================                                                                             |  33%
  |                                                                                                                         
  |==========================================                                                                         |  36%
  |                                                                                                                         
  |=============================================                                                                      |  39%
  |                                                                                                                         
  |================================================                                                                   |  42%
  |                                                                                                                         
  |===================================================                                                                |  44%
  |                                                                                                                         
  |======================================================                                                             |  47%
  |                                                                                                                         
  |==========================================================                                                         |  50%
  |                                                                                                                         
  |=============================================================                                                      |  53%
  |                                                                                                                         
  |================================================================                                                   |  56%
  |                                                                                                                         
  |===================================================================                                                |  58%
  |                                                                                                                         
  |======================================================================                                             |  61%
  |                                                                                                                         
  |=========================================================================                                          |  64%
  |                                                                                                                         
  |=============================================================================                                      |  67%
  |                                                                                                                         
  |================================================================================                                   |  69%
  |                                                                                                                         
  |===================================================================================                                |  72%
  |                                                                                                                         
  |======================================================================================                             |  75%
  |                                                                                                                         
  |=========================================================================================                          |  78%
  |                                                                                                                         
  |=============================================================================================                      |  81%
  |                                                                                                                         
  |================================================================================================                   |  83%
  |                                                                                                                         
  |===================================================================================================                |  86%
  |                                                                                                                         
  |======================================================================================================             |  89%
  |                                                                                                                         
  |=========================================================================================================          |  92%
  |                                                                                                                         
  |=============================================================================================================      |  94%
  |                                                                                                                         
  |================================================================================================================   |  97%
  |                                                                                                                         
  |===================================================================================================================| 100%
Computing corrected count matrix for 17709 genes

  |                                                                                                                         
  |                                                                                                                   |   0%
  |                                                                                                                         
  |===                                                                                                                |   3%
  |                                                                                                                         
  |======                                                                                                             |   6%
  |                                                                                                                         
  |==========                                                                                                         |   8%
  |                                                                                                                         
  |=============                                                                                                      |  11%
  |                                                                                                                         
  |================                                                                                                   |  14%
  |                                                                                                                         
  |===================                                                                                                |  17%
  |                                                                                                                         
  |======================                                                                                             |  19%
  |                                                                                                                         
  |==========================                                                                                         |  22%
  |                                                                                                                         
  |=============================                                                                                      |  25%
  |                                                                                                                         
  |================================                                                                                   |  28%
  |                                                                                                                         
  |===================================                                                                                |  31%
  |                                                                                                                         
  |======================================                                                                             |  33%
  |                                                                                                                         
  |==========================================                                                                         |  36%
  |                                                                                                                         
  |=============================================                                                                      |  39%
  |                                                                                                                         
  |================================================                                                                   |  42%
  |                                                                                                                         
  |===================================================                                                                |  44%
  |                                                                                                                         
  |======================================================                                                             |  47%
  |                                                                                                                         
  |==========================================================                                                         |  50%
  |                                                                                                                         
  |=============================================================                                                      |  53%
  |                                                                                                                         
  |================================================================                                                   |  56%
  |                                                                                                                         
  |===================================================================                                                |  58%
  |                                                                                                                         
  |======================================================================                                             |  61%
  |                                                                                                                         
  |=========================================================================                                          |  64%
  |                                                                                                                         
  |=============================================================================                                      |  67%
  |                                                                                                                         
  |================================================================================                                   |  69%
  |                                                                                                                         
  |===================================================================================                                |  72%
  |                                                                                                                         
  |======================================================================================                             |  75%
  |                                                                                                                         
  |=========================================================================================                          |  78%
  |                                                                                                                         
  |=============================================================================================                      |  81%
  |                                                                                                                         
  |================================================================================================                   |  83%
  |                                                                                                                         
  |===================================================================================================                |  86%
  |                                                                                                                         
  |======================================================================================================             |  89%
  |                                                                                                                         
  |=========================================================================================================          |  92%
  |                                                                                                                         
  |=============================================================================================================      |  94%
  |                                                                                                                         
  |================================================================================================================   |  97%
  |                                                                                                                         
  |===================================================================================================================| 100%
Calculating gene attributes
Wall clock passed: Time difference of 2.660115 mins
Determine variable features
Place corrected count matrix in counts slot
Regressing out nCount_RNA, nFeature_RNA

  |                                                                                                                         
  |                                                                                                                   |   0%
  |                                                                                                                         
  |=                                                                                                                  |   0%
  |                                                                                                                         
  |=                                                                                                                  |   1%
  |                                                                                                                         
  |==                                                                                                                 |   1%
  |                                                                                                                         
  |==                                                                                                                 |   2%
  |                                                                                                                         
  |===                                                                                                                |   2%
  |                                                                                                                         
  |===                                                                                                                |   3%
  |                                                                                                                         
  |====                                                                                                               |   3%
  |                                                                                                                         
  |====                                                                                                               |   4%
  |                                                                                                                         
  |=====                                                                                                              |   4%
  |                                                                                                                         
  |=====                                                                                                              |   5%
  |                                                                                                                         
  |======                                                                                                             |   5%
  |                                                                                                                         
  |======                                                                                                             |   6%
  |                                                                                                                         
  |=======                                                                                                            |   6%
  |                                                                                                                         
  |========                                                                                                           |   7%
  |                                                                                                                         
  |=========                                                                                                          |   7%
  |                                                                                                                         
  |=========                                                                                                          |   8%
  |                                                                                                                         
  |==========                                                                                                         |   8%
  |                                                                                                                         
  |==========                                                                                                         |   9%
  |                                                                                                                         
  |===========                                                                                                        |   9%
  |                                                                                                                         
  |===========                                                                                                        |  10%
  |                                                                                                                         
  |============                                                                                                       |  10%
  |                                                                                                                         
  |============                                                                                                       |  11%
  |                                                                                                                         
  |=============                                                                                                      |  11%
  |                                                                                                                         
  |=============                                                                                                      |  12%
  |                                                                                                                         
  |==============                                                                                                     |  12%
  |                                                                                                                         
  |==============                                                                                                     |  13%
  |                                                                                                                         
  |===============                                                                                                    |  13%
  |                                                                                                                         
  |================                                                                                                   |  14%
  |                                                                                                                         
  |=================                                                                                                  |  14%
  |                                                                                                                         
  |=================                                                                                                  |  15%
  |                                                                                                                         
  |==================                                                                                                 |  15%
  |                                                                                                                         
  |==================                                                                                                 |  16%
  |                                                                                                                         
  |===================                                                                                                |  16%
  |                                                                                                                         
  |===================                                                                                                |  17%
  |                                                                                                                         
  |====================                                                                                               |  17%
  |                                                                                                                         
  |====================                                                                                               |  18%
  |                                                                                                                         
  |=====================                                                                                              |  18%
  |                                                                                                                         
  |=====================                                                                                              |  19%
  |                                                                                                                         
  |======================                                                                                             |  19%
  |                                                                                                                         
  |======================                                                                                             |  20%
  |                                                                                                                         
  |=======================                                                                                            |  20%
  |                                                                                                                         
  |========================                                                                                           |  20%
  |                                                                                                                         
  |========================                                                                                           |  21%
  |                                                                                                                         
  |=========================                                                                                          |  21%
  |                                                                                                                         
  |=========================                                                                                          |  22%
  |                                                                                                                         
  |==========================                                                                                         |  22%
  |                                                                                                                         
  |==========================                                                                                         |  23%
  |                                                                                                                         
  |===========================                                                                                        |  23%
  |                                                                                                                         
  |===========================                                                                                        |  24%
  |                                                                                                                         
  |============================                                                                                       |  24%
  |                                                                                                                         
  |============================                                                                                       |  25%
  |                                                                                                                         
  |=============================                                                                                      |  25%
  |                                                                                                                         
  |=============================                                                                                      |  26%
  |                                                                                                                         
  |==============================                                                                                     |  26%
  |                                                                                                                         
  |===============================                                                                                    |  27%
  |                                                                                                                         
  |================================                                                                                   |  27%
  |                                                                                                                         
  |================================                                                                                   |  28%
  |                                                                                                                         
  |=================================                                                                                  |  28%
  |                                                                                                                         
  |=================================                                                                                  |  29%
  |                                                                                                                         
  |==================================                                                                                 |  29%
  |                                                                                                                         
  |==================================                                                                                 |  30%
  |                                                                                                                         
  |===================================                                                                                |  30%
  |                                                                                                                         
  |===================================                                                                                |  31%
  |                                                                                                                         
  |====================================                                                                               |  31%
  |                                                                                                                         
  |====================================                                                                               |  32%
  |                                                                                                                         
  |=====================================                                                                              |  32%
  |                                                                                                                         
  |=====================================                                                                              |  33%
  |                                                                                                                         
  |======================================                                                                             |  33%
  |                                                                                                                         
  |=======================================                                                                            |  34%
  |                                                                                                                         
  |========================================                                                                           |  34%
  |                                                                                                                         
  |========================================                                                                           |  35%
  |                                                                                                                         
  |=========================================                                                                          |  35%
  |                                                                                                                         
  |=========================================                                                                          |  36%
  |                                                                                                                         
  |==========================================                                                                         |  36%
  |                                                                                                                         
  |==========================================                                                                         |  37%
  |                                                                                                                         
  |===========================================                                                                        |  37%
  |                                                                                                                         
  |===========================================                                                                        |  38%
  |                                                                                                                         
  |============================================                                                                       |  38%
  |                                                                                                                         
  |============================================                                                                       |  39%
  |                                                                                                                         
  |=============================================                                                                      |  39%
  |                                                                                                                         
  |=============================================                                                                      |  40%
  |                                                                                                                         
  |==============================================                                                                     |  40%
  |                                                                                                                         
  |===============================================                                                                    |  40%
  |                                                                                                                         
  |===============================================                                                                    |  41%
  |                                                                                                                         
  |================================================                                                                   |  41%
  |                                                                                                                         
  |================================================                                                                   |  42%
  |                                                                                                                         
  |=================================================                                                                  |  42%
  |                                                                                                                         
  |=================================================                                                                  |  43%
  |                                                                                                                         
  |==================================================                                                                 |  43%
  |                                                                                                                         
  |==================================================                                                                 |  44%
  |                                                                                                                         
  |===================================================                                                                |  44%
  |                                                                                                                         
  |===================================================                                                                |  45%
  |                                                                                                                         
  |====================================================                                                               |  45%
  |                                                                                                                         
  |====================================================                                                               |  46%
  |                                                                                                                         
  |=====================================================                                                              |  46%
  |                                                                                                                         
  |======================================================                                                             |  47%
  |                                                                                                                         
  |=======================================================                                                            |  47%
  |                                                                                                                         
  |=======================================================                                                            |  48%
  |                                                                                                                         
  |========================================================                                                           |  48%
  |                                                                                                                         
  |========================================================                                                           |  49%
  |                                                                                                                         
  |=========================================================                                                          |  49%
  |                                                                                                                         
  |=========================================================                                                          |  50%
  |                                                                                                                         
  |==========================================================                                                         |  50%
  |                                                                                                                         
  |==========================================================                                                         |  51%
  |                                                                                                                         
  |===========================================================                                                        |  51%
  |                                                                                                                         
  |===========================================================                                                        |  52%
  |                                                                                                                         
  |============================================================                                                       |  52%
  |                                                                                                                         
  |============================================================                                                       |  53%
  |                                                                                                                         
  |=============================================================                                                      |  53%
  |                                                                                                                         
  |==============================================================                                                     |  54%
  |                                                                                                                         
  |===============================================================                                                    |  54%
  |                                                                                                                         
  |===============================================================                                                    |  55%
  |                                                                                                                         
  |================================================================                                                   |  55%
  |                                                                                                                         
  |================================================================                                                   |  56%
  |                                                                                                                         
  |=================================================================                                                  |  56%
  |                                                                                                                         
  |=================================================================                                                  |  57%
  |                                                                                                                         
  |==================================================================                                                 |  57%
  |                                                                                                                         
  |==================================================================                                                 |  58%
  |                                                                                                                         
  |===================================================================                                                |  58%
  |                                                                                                                         
  |===================================================================                                                |  59%
  |                                                                                                                         
  |====================================================================                                               |  59%
  |                                                                                                                         
  |====================================================================                                               |  60%
  |                                                                                                                         
  |=====================================================================                                              |  60%
  |                                                                                                                         
  |======================================================================                                             |  60%
  |                                                                                                                         
  |======================================================================                                             |  61%
  |                                                                                                                         
  |=======================================================================                                            |  61%
  |                                                                                                                         
  |=======================================================================                                            |  62%
  |                                                                                                                         
  |========================================================================                                           |  62%
  |                                                                                                                         
  |========================================================================                                           |  63%
  |                                                                                                                         
  |=========================================================================                                          |  63%
  |                                                                                                                         
  |=========================================================================                                          |  64%
  |                                                                                                                         
  |==========================================================================                                         |  64%
  |                                                                                                                         
  |==========================================================================                                         |  65%
  |                                                                                                                         
  |===========================================================================                                        |  65%
  |                                                                                                                         
  |===========================================================================                                        |  66%
  |                                                                                                                         
  |============================================================================                                       |  66%
  |                                                                                                                         
  |=============================================================================                                      |  67%
  |                                                                                                                         
  |==============================================================================                                     |  67%
  |                                                                                                                         
  |==============================================================================                                     |  68%
  |                                                                                                                         
  |===============================================================================                                    |  68%
  |                                                                                                                         
  |===============================================================================                                    |  69%
  |                                                                                                                         
  |================================================================================                                   |  69%
  |                                                                                                                         
  |================================================================================                                   |  70%
  |                                                                                                                         
  |=================================================================================                                  |  70%
  |                                                                                                                         
  |=================================================================================                                  |  71%
  |                                                                                                                         
  |==================================================================================                                 |  71%
  |                                                                                                                         
  |==================================================================================                                 |  72%
  |                                                                                                                         
  |===================================================================================                                |  72%
  |                                                                                                                         
  |===================================================================================                                |  73%
  |                                                                                                                         
  |====================================================================================                               |  73%
  |                                                                                                                         
  |=====================================================================================                              |  74%
  |                                                                                                                         
  |======================================================================================                             |  74%
  |                                                                                                                         
  |======================================================================================                             |  75%
  |                                                                                                                         
  |=======================================================================================                            |  75%
  |                                                                                                                         
  |=======================================================================================                            |  76%
  |                                                                                                                         
  |========================================================================================                           |  76%
  |                                                                                                                         
  |========================================================================================                           |  77%
  |                                                                                                                         
  |=========================================================================================                          |  77%
  |                                                                                                                         
  |=========================================================================================                          |  78%
  |                                                                                                                         
  |==========================================================================================                         |  78%
  |                                                                                                                         
  |==========================================================================================                         |  79%
  |                                                                                                                         
  |===========================================================================================                        |  79%
  |                                                                                                                         
  |===========================================================================================                        |  80%
  |                                                                                                                         
  |============================================================================================                       |  80%
  |                                                                                                                         
  |=============================================================================================                      |  80%
  |                                                                                                                         
  |=============================================================================================                      |  81%
  |                                                                                                                         
  |==============================================================================================                     |  81%
  |                                                                                                                         
  |==============================================================================================                     |  82%
  |                                                                                                                         
  |===============================================================================================                    |  82%
  |                                                                                                                         
  |===============================================================================================                    |  83%
  |                                                                                                                         
  |================================================================================================                   |  83%
  |                                                                                                                         
  |================================================================================================                   |  84%
  |                                                                                                                         
  |=================================================================================================                  |  84%
  |                                                                                                                         
  |=================================================================================================                  |  85%
  |                                                                                                                         
  |==================================================================================================                 |  85%
  |                                                                                                                         
  |==================================================================================================                 |  86%
  |                                                                                                                         
  |===================================================================================================                |  86%
  |                                                                                                                         
  |====================================================================================================               |  87%
  |                                                                                                                         
  |=====================================================================================================              |  87%
  |                                                                                                                         
  |=====================================================================================================              |  88%
  |                                                                                                                         
  |======================================================================================================             |  88%
  |                                                                                                                         
  |======================================================================================================             |  89%
  |                                                                                                                         
  |=======================================================================================================            |  89%
  |                                                                                                                         
  |=======================================================================================================            |  90%
  |                                                                                                                         
  |========================================================================================================           |  90%
  |                                                                                                                         
  |========================================================================================================           |  91%
  |                                                                                                                         
  |=========================================================================================================          |  91%
  |                                                                                                                         
  |=========================================================================================================          |  92%
  |                                                                                                                         
  |==========================================================================================================         |  92%
  |                                                                                                                         
  |==========================================================================================================         |  93%
  |                                                                                                                         
  |===========================================================================================================        |  93%
  |                                                                                                                         
  |============================================================================================================       |  94%
  |                                                                                                                         
  |=============================================================================================================      |  94%
  |                                                                                                                         
  |=============================================================================================================      |  95%
  |                                                                                                                         
  |==============================================================================================================     |  95%
  |                                                                                                                         
  |==============================================================================================================     |  96%
  |                                                                                                                         
  |===============================================================================================================    |  96%
  |                                                                                                                         
  |===============================================================================================================    |  97%
  |                                                                                                                         
  |================================================================================================================   |  97%
  |                                                                                                                         
  |================================================================================================================   |  98%
  |                                                                                                                         
  |=================================================================================================================  |  98%
  |                                                                                                                         
  |=================================================================================================================  |  99%
  |                                                                                                                         
  |================================================================================================================== |  99%
  |                                                                                                                         
  |================================================================================================================== | 100%
  |                                                                                                                         
  |===================================================================================================================| 100%
Centering data matrix

  |                                                                                                                         
  |                                                                                                                   |   0%
  |                                                                                                                         
  |=============================                                                                                      |  25%
  |                                                                                                                         
  |==========================================================                                                         |  50%
  |                                                                                                                         
  |======================================================================================                             |  75%
  |                                                                                                                         
  |===================================================================================================================| 100%
Set default assay to SCT

Tada! Now lets do some plotting and clustering!

linear dimensional reduction. Default are based on VariableFeatures, but can be changed

seurat.object <- RunPCA(seurat.object, features = VariableFeatures(object = seurat.object), verbose = FALSE)
VizDimLoadings(seurat.object, dims = 1:6, nfeatures = 10, reduction = "pca", ncol = 2)

DimPlot colored by orig.ident

DimPlot(seurat.object, reduction = "pca", group.by = "orig.ident")

source("msAggr_AnalysisCode/PercentVariance.R")
ElbowPlot(seurat.object, ndims = 50)
percent.variance(seurat.object@reductions$pca@stdev)

Number of PCs describing X% of variance

ElbowPlot(seurat.object, ndims = 50)

percent.variance(seurat.object@reductions$pca@stdev)

Huge jump between 90% and 95%. will start at the 95%, like before.

tot.var <- percent.variance(seurat.object@reductions$pca@stdev, plot.var = FALSE, return.val = TRUE)
paste0("Num pcs for 80% variance:", length(which(cumsum(tot.var) <= 80)))
[1] "Num pcs for 80% variance:11"
paste0("Num pcs for 85% variance:", length(which(cumsum(tot.var) <= 85)))
[1] "Num pcs for 85% variance:15"
paste0("Num pcs for 90% variance:", length(which(cumsum(tot.var) <= 90)))
[1] "Num pcs for 90% variance:22"
paste0("Num pcs for 95% variance:", length(which(cumsum(tot.var) <= 95)))
[1] "Num pcs for 95% variance:33"

Plotting…

seurat.object <- RunUMAP(seurat.object, dims = 1:33)
16:50:51 UMAP embedding parameters a = 0.9922 b = 1.112
16:50:51 Read 40815 rows and found 33 numeric columns
16:50:51 Using Annoy for neighbor search, n_neighbors = 30
16:50:51 Building Annoy index with metric = cosine, n_trees = 50
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
16:50:56 Writing NN index file to temp file /var/folders/4f/fwrj6fnn1dn4g8wsf0zv563hjsvl24/T//RtmpLSZxR7/file16fc1e0cf629
16:50:56 Searching Annoy index using 1 thread, search_k = 3000
16:51:07 Annoy recall = 100%
16:51:08 Commencing smooth kNN distance calibration using 1 thread
16:51:10 Initializing from normalized Laplacian + noise
16:51:12 Commencing optimization for 200 epochs, with 1697286 positive edges
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
16:51:32 Optimization finished
seurat.object <- FindNeighbors(seurat.object, dims = 1:33)
Computing nearest neighbor graph
Computing SNN
for(x in c(0.5, 1, 1.5, 2, 2.5)){
    seurat.object <- FindClusters(seurat.object, resolution = x)
}
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 40815
Number of edges: 1349968

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.9113
Number of communities: 17
Elapsed time: 8 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 40815
Number of edges: 1349968

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8778
Number of communities: 27
Elapsed time: 8 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 40815
Number of edges: 1349968

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8566
Number of communities: 36
Elapsed time: 8 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 40815
Number of edges: 1349968

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8392
Number of communities: 46
Elapsed time: 8 seconds
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 40815
Number of edges: 1349968

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8250
Number of communities: 48
Elapsed time: 7 seconds
for (meta.col in colnames(seurat.object@meta.data)){
    if(grepl(pattern = ("SCT_snn_res"), x = meta.col)==TRUE){
        myplot <- DimPlot(seurat.object, 
                                            group.by = meta.col,
                                            reduction = "umap", 
                                            cols = colorRamps::primary.colors(n = length(levels(seurat.object@meta.data[[meta.col]])))
                                            ) + 
            ggtitle(paste0("msAggr sct dim31 res", gsub("SCT_snn_res", "", meta.col) ))
        plot(myplot)
    }
}

Evaluate cluster stability

Must ensure we have the right cluster stability, that is, cells that start in the same cluster tend to stay in the same cluster. If your data is over-clustered, cells will bounce between groups.

Following [this tutorial by Matt O.].https://towardsdatascience.com/10-tips-for-choosing-the-optimal-number-of-clusters-277e93d72d92.

Clustree

Previously my favourite has been Clustree, which gives a nice visual NB: For some reason clustree::clustree() didn’t work, whereas library(clustree) followed by clustree() did.

saveRDS(seurat.object, file = "msAggr_sctdim33.rds")

Basically no stability difference compared to before.

LS0tCnRpdGxlOiAibXNBZ2dyX3NjdHJhbnNmb3JtLXYxIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpDcmVhdGluZyBuZXcgcGlwZWxpbmUgdXNpbmcgc2V1cmF0IHY0LjAuMiBhdmFpbGFibGUgMjAyMS4wNi4wOAoKTG9hZCBsaWJyYXJpZXMgcmVxdWlyZWQgZm9yIFNldXJhdHY0CgpgYGB7ciBzZXR1cH0Ka25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXIgPSAifi9EZXNrdG9wLzEwWEdlbm9taWNzRGF0YS9tc0FnZ3Jfc2NSTkFTZXEvIikKbGlicmFyeShkcGx5cikKbGlicmFyeShTZXVyYXQpCmxpYnJhcnkocGF0Y2h3b3JrKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoY2x1c3RyZWUpCmBgYApzdG9yZSBzZXNzaW9uIGluZm8KYGBge3J9CnNpbmsoIm1zQWdncl9zY3QtdjEuMjAyMTA2MTUiKQpzZXNzaW9uSW5mbygpCnNpbmsoKQpgYGAKCiMgQSBub3RlIGFib3V0IHVzaW5nIFNDVHJhbnNmb3JtIHZlcnN1cyBgU2NhbGVEYXRhYApodHRwczovL2Jpb2NvbmR1Y3Rvci5vcmcvcGFja2FnZXMvMy4xMC93b3JrZmxvd3MvdmlnbmV0dGVzL3NpbXBsZVNpbmdsZUNlbGwvaW5zdC9kb2MvYmF0Y2guaHRtbCM2Ml9mb3JfZ2VuZS1iYXNlZF9hbmFseXNlcwo+WW91IGNhbiBhbHNvIG5vcm1hbGl6ZSBhbmQgc2NhbGUgZGF0YSBmb3IgdGhlIFJOQSBhc3NheS4gVGhlcmUgYXJlIG51bWVyb3VzIHJlc291cmNlcyBvbiB0aGlzLCBidXQgQWFyb24gTHVuIGRlc2NyaWJlcyB3aHkgdGhlIG9yaWdpbmFsIGxvZy1ub3JtYWxpemVkIHZhbHVlcyBzaG91bGQgYmUgdXNlZCBmb3IgREUgYW5kIHZpc3VhbGl6YXRpb25zIG9mIGV4cHJlc3Npb24gcXVpdGUgd2VsbCBoZXJlOgo+Cj5Gb3IgZ2VuZS1iYXNlZCBwcm9jZWR1cmVzIGxpa2UgZGlmZmVyZW50aWFsIGV4cHJlc3Npb24gKERFKSBhbmFseXNlcyBvciBnZW5lIG5ldHdvcmsgY29uc3RydWN0aW9uLCBpdCBpcyBkZXNpcmFibGUgdG8gdXNlIHRoZSBvcmlnaW5hbCBsb2ctZXhwcmVzc2lvbiB2YWx1ZXMgb3IgY291bnRzLiBUaGUgY29ycmVjdGVkIHZhbHVlcyBhcmUgb25seSB1c2VkIHRvIG9idGFpbiBjZWxsLWxldmVsIHJlc3VsdHMgc3VjaCBhcyBjbHVzdGVycyBvciB0cmFqZWN0b3JpZXMuIEJhdGNoIGVmZmVjdHMgYXJlIGhhbmRsZWQgZXhwbGljaXRseSB1c2luZyBibG9ja2luZyB0ZXJtcyBvciB2aWEgYSBtZXRhLWFuYWx5c2lzIGFjcm9zcyBiYXRjaGVzLiBXZSBkbyBub3QgdXNlIHRoZSBjb3JyZWN0ZWQgdmFsdWVzIGRpcmVjdGx5IGluIGdlbmUtYmFzZWQgYW5hbHlzZXMsIGZvciB2YXJpb3VzIHJlYXNvbnM6Cj4KPkl0IGlzIHVzdWFsbHkgaW5hcHByb3ByaWF0ZSB0byBwZXJmb3JtIERFIGFuYWx5c2VzIG9uIGJhdGNoLWNvcnJlY3RlZCB2YWx1ZXMsIGR1ZSB0byB0aGUgZmFpbHVyZSB0byBtb2RlbCB0aGUgdW5jZXJ0YWludHkgb2YgdGhlIGNvcnJlY3Rpb24uIFRoaXMgdXN1YWxseSByZXN1bHRzIGluIGxvc3Mgb2YgdHlwZSBJIGVycm9yIGNvbnRyb2wsIGkuZS4sIG1vcmUgZmFsc2UgcG9zaXRpdmVzIHRoYW4gZXhwZWN0ZWQuCj4KPlRoZSBjb3JyZWN0aW9uIGRvZXMgbm90IHByZXNlcnZlIHRoZSBtZWFuLXZhcmlhbmNlIHJlbGF0aW9uc2hpcC4gQXBwbGljYXRpb25zIG9mIGNvbW1vbiBERSBtZXRob2RzIGxpa2UgZWRnZVIgb3IgbGltbWEgYXJlIHVubGlrZWx5IHRvIGJlIHZhbGlkLgo+Cj5CYXRjaCBjb3JyZWN0aW9uIG1heSAoY29ycmVjdGx5KSByZW1vdmUgYmlvbG9naWNhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGJhdGNoZXMgaW4gdGhlIGNvdXJzZSBvZiBtYXBwaW5nIGFsbCBjZWxscyBvbnRvIGEgY29tbW9uIGNvb3JkaW5hdGUgc3lzdGVtLiBSZXR1cm5pbmcgdG8gdGhlIHVuY29ycmVjdGVkIGV4cHJlc3Npb24gdmFsdWVzIHByb3ZpZGVzIGFuIG9wcG9ydHVuaXR5IGZvciBkZXRlY3Rpbmcgc3VjaCBkaWZmZXJlbmNlcyBpZiB0aGV5IGFyZSBvZiBpbnRlcmVzdC4gQ29udmVyc2VseSwgaWYgdGhlIGJhdGNoIGNvcnJlY3Rpb24gbWFkZSBhIG1pc3Rha2UsIHRoZSB1c2Ugb2YgdGhlIHVuY29ycmVjdGVkIGV4cHJlc3Npb24gdmFsdWVzIHByb3ZpZGVzIGFuIGltcG9ydGFudCBzYW5pdHkgY2hlY2suCj4KPkluIGFkZGl0aW9uLCB0aGUgbm9ybWFsaXplZCB2YWx1ZXMgaW4gU0NUIGFuZCBpbnRlZ3JhdGVkIGFzc2F5cyBkb24ndCBuZWNlc3NhcnkgY29ycmVzcG9uZCB0byBwZXItZ2VuZSBleHByZXNzaW9uIHZhbHVlcyBhbnl3YXksIHJhdGhlciBjb250YWluaW5nIHJlc2lkdWFscyAoaW4gdGhlIGNhc2Ugb2YgdGhlIHNjYWxlLmRhdGEgc2xvdCBmb3IgZWFjaCkuCgoKTG9hZCA0IHBvcHVsYXRpb25zIGludG8gc2luZ2xlIHNldXJhdCBvYmplY3QKCgpTRVQgU0VFRD8/Pz8/ISEhISEKCiMjIFNldCBnbG9iYWwgdmFyaWFibGVzCmBgYHtyfQpwcm9qZWN0TmFtZSA8LSAibXNBZ2dyX3NjdCIKamFja3N0cmF3LmRpbSA8LSA0MApgYGAKCgoKYGBge3J9CnNvdXJjZSgibXNBZ2dyX0FuYWx5c2lzQ29kZS9yZWFkXzEwWEdlbm9taWNzX2RhdGEuUiIpCgpgYGAKCgpgYGB7cn0Kc2V0d2QoIi4uL2NlbGxSYW5nZXIvIikgIyB0ZW1wb3JhcmlseSBjaGFuZ2luZyB3ZCBvbmx5IHdvcmtzIGlmIHlvdSBydW4gdGhlIGVudGlyZSBjaHVuayBhdCBvbmNlCmRhdGFfZmlsZS5saXN0IDwtIHJlYWRfMTBYR2Vub21pY3NfZGF0YShzYW1wbGUubGlzdCA9IGMoIkxTS20yIiwgIkNNUG0yIiwgIk1FUG0iLCAiR01QbSIpKQpvYmplY3QuZGF0YSA8LVJlYWQxMFgoZGF0YV9maWxlLmxpc3QpCmBgYAoKCgpgYGB7cn0Kc2V1cmF0Lm9iamVjdDwtIENyZWF0ZVNldXJhdE9iamVjdChjb3VudHMgPSBvYmplY3QuZGF0YSwgbWluLmNlbGxzID0gMywgbWluLmdlbmVzID0gMjAwLCBwcm9qZWN0ID0gcHJvamVjdE5hbWUpCmBgYAoKQ2xlYW4gdXAgdG8gZnJlZSBtZW1vcnkKCmBgYHtyfQpyZW1vdmUoc2V1cmF0Lm9iamVjdC5kYXRhKQpgYGAKCgpBZGQgbWl0b2Nob25kcmlhbCBtZXRhZGF0YSBhbmQgcGxvdCBzb21lIGJhc2ljIGZlYXR1cmVzCmBgYHtyfQpzZXVyYXQub2JqZWN0W1sicGVyY2VudC5tdCJdXSA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChzZXVyYXQub2JqZWN0LCBwYXR0ZXJuID0gIl5tdC0iKQpWbG5QbG90KHNldXJhdC5vYmplY3QsIGZlYXR1cmVzID0gYygibkZlYXR1cmVfUk5BIiwgIm5Db3VudF9STkEiLCAicGVyY2VudC5tdCIpLCBuY29sID0gMywgcHQuc2l6ZSA9IDAsIGZpbGwuYnkgPSAnb3JpZy5pZGVudCcsICkKYGBgCgoKYGBge3IgZmlnLndpZHRoPTQsIGZpZy5oZWlnaHQ9Mn0KcGxvdDEgPC0gRmVhdHVyZVNjYXR0ZXIoc2V1cmF0Lm9iamVjdCwgZmVhdHVyZTEgPSAibkNvdW50X1JOQSIsIGZlYXR1cmUyID0gInBlcmNlbnQubXQiLCBncm91cC5ieSA9ICJvcmlnLmlkZW50IiwgcHQuc2l6ZSA9IDAuMDEpCnBsb3QyIDwtIEZlYXR1cmVTY2F0dGVyKHNldXJhdC5vYmplY3QsIGZlYXR1cmUxID0gIm5Db3VudF9STkEiLCBmZWF0dXJlMiA9ICJuRmVhdHVyZV9STkEiLCBncm91cC5ieSA9ICJvcmlnLmlkZW50IiwgcHQuc2l6ZSA9IDAuMDEpCnBsb3QxICsgcGxvdDIKYGBgCnJlbW92ZSBsb3cgcXVhbGl0eSBjZWxscyAqKgpyZXF1aXJlOiBuRmVhdHVyZV9STkEgYmV0d2VlbiAyMDAgYW5kIDQwMDAgKGluY2x1c2l2ZSkKLS1yZXF1aXJlOiBwZXJjZW50Lm10IDw1LS0/Pz8KClwqKiBJbiBwcmV2aW91cyBydW4gaXQncyBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gbGltaXQgcGVyY2VudC5tdCBiZWNhdXNlIG9mIE1FUG0gd2VpcmRuZXNzLiBXaWxsIGhhdmUgdG8gc2VlIGlmIHRoZSBhZGRpdGlvbmFsIDIwMDAgTUVQbSBjZWxscyBmb3VuZCBieSBjZWxscmFuZ2VyIHY2CgpgYGB7cn0KcHJpbnQocGFzdGUoIm9yaWdpbmFsIG9iamVjdDoiLCBucm93KHNldXJhdC5vYmplY3RAbWV0YS5kYXRhKSwgImNlbGxzIiwgc2VwID0gIiAiKSkKc2V1cmF0Lm9iamVjdCA8LSBzdWJzZXQoc2V1cmF0Lm9iamVjdCwgCgkJCQkJCQkJCQkJCXN1YnNldCA9IG5GZWF0dXJlX1JOQSA+PTIwMCAmIAoJCQkJCQkJCQkJCQkJbkZlYXR1cmVfUk5BIDw9IDQwMDAKCQkJCQkJCQkJCQkJKQpwcmludChwYXN0ZSgibmV3IG9iamVjdDoiLCBucm93KHNldXJhdC5vYmplY3RAbWV0YS5kYXRhKSwgImNlbGxzIiwgc2VwID0gIiAiKSkKc2V1cmF0Lm9iamVjdCA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChzZXVyYXQub2JqZWN0LCBwYXR0ZXJuID0gJ15tdC0nLCBjb2wubmFtZSA9ICJwZXJjZW50Lm10IikKYGBgCgoKCiMjIFNDVHJhbnNmb3JtCgpBcyBwcmV2aW91c2x5IG1lbnRpb25lZCwgYFNDVHJhbnNmb3JtKClgIGlzIGJlc3QgZm9yIGJhdGNoIGNvcnJlY3Rpb24sIHdoZXJlYXMgYE5vcm1hbGl6ZURhdGEoKWAsIGBTY2FsZURhdGEoKWAsIGFuZCBgRmluZFZhcmlhYmxlRmVhdHVyZXMoKWAgYXJlIGJlc3QgZm9yIERHRS4gSSdtIHN0cnVnZ2xpbmcgdG8gbWFrZSBzdGFibGUgY2x1c3RlcnMsIHNvIEknbSBqdW1waW5nIGFoZWFkIHRvIGBTQ1RyYW5zZm9ybSgpYC4gIApJdCBkb2VzIGFwcGVhciB0aGF0IGBTQ1RyYW5zZm9ybSgpYCBkYXRhIGFyZSBzdG9yZWQgaW4gdGhlIFNDVCBhc3NheSBzbG90LCB3aGljaCBkb2VzIG5vdCBvdmVyd3JpdGUgb3RoZXIgbm9ybWFsaXphdGlvbiBzbG90cy4gSXQgd2lsbCBiZWNvbWUgdGhlIGRlZmF1bHQgc2xvdCBvbmNlIHBvcHVsYXRlZC4KCmBgYHtyfQpzZXVyYXQub2JqZWN0IDwtIFNDVHJhbnNmb3JtKHNldXJhdC5vYmplY3QsIAoJCQkJCQkJCQkJCQkJCSBtZXRob2QgPSAiZ2xtR2FtUG9pIiwgCgkJCQkJCQkJCQkJCQkJIHZhcnMudG8ucmVncmVzcyA9IGMoIm5Db3VudF9STkEiLCAibkZlYXR1cmVfUk5BIikKCQkJCQkJCQkJCQkJCQkgKSAjIG1ldGhvZCA9ICJnbG1HYW1Qb2kiIHNwZWVkcyBwcm9jZXNzCmBgYAoKVGFkYSEgTm93IGxldHMgZG8gc29tZSBwbG90dGluZyBhbmQgY2x1c3RlcmluZyEKCmxpbmVhciBkaW1lbnNpb25hbCByZWR1Y3Rpb24uIERlZmF1bHQgYXJlIGJhc2VkIG9uIFZhcmlhYmxlRmVhdHVyZXMsIGJ1dCBjYW4gYmUgY2hhbmdlZAoKYGBge3J9CnNldXJhdC5vYmplY3QgPC0gUnVuUENBKHNldXJhdC5vYmplY3QsIGZlYXR1cmVzID0gVmFyaWFibGVGZWF0dXJlcyhvYmplY3QgPSBzZXVyYXQub2JqZWN0KSwgdmVyYm9zZSA9IEZBTFNFKQpgYGAKCgpgYGB7ciBmaWcud2lkdGg9NCwgZmlnLmhlaWdodD00fQpWaXpEaW1Mb2FkaW5ncyhzZXVyYXQub2JqZWN0LCBkaW1zID0gMTo2LCBuZmVhdHVyZXMgPSAxMCwgcmVkdWN0aW9uID0gInBjYSIsIG5jb2wgPSAyKQpgYGAKCkRpbVBsb3QgY29sb3JlZCBieSBvcmlnLmlkZW50CmBgYHtyfQpEaW1QbG90KHNldXJhdC5vYmplY3QsIHJlZHVjdGlvbiA9ICJwY2EiLCBncm91cC5ieSA9ICJvcmlnLmlkZW50IikKYGBgCgpgYGB7cn0Kc291cmNlKCJtc0FnZ3JfQW5hbHlzaXNDb2RlL1BlcmNlbnRWYXJpYW5jZS5SIikKYGBgCgpgYGB7ciwgZmlndXJlcy1zaWRlLCBmaWcuc2hvdz0naG9sZCcsIG91dC53aWR0aD0iNTAlIn0KRWxib3dQbG90KHNldXJhdC5vYmplY3QsIG5kaW1zID0gNTApCnBlcmNlbnQudmFyaWFuY2Uoc2V1cmF0Lm9iamVjdEByZWR1Y3Rpb25zJHBjYUBzdGRldikKYGBgCk51bWJlciBvZiBQQ3MgZGVzY3JpYmluZyBYJSBvZiB2YXJpYW5jZQoKYGBge3J9CnRvdC52YXIgPC0gcGVyY2VudC52YXJpYW5jZShzZXVyYXQub2JqZWN0QHJlZHVjdGlvbnMkcGNhQHN0ZGV2LCBwbG90LnZhciA9IEZBTFNFLCByZXR1cm4udmFsID0gVFJVRSkKcGFzdGUwKCJOdW0gcGNzIGZvciA4MCUgdmFyaWFuY2U6IiwgbGVuZ3RoKHdoaWNoKGN1bXN1bSh0b3QudmFyKSA8PSA4MCkpKQpwYXN0ZTAoIk51bSBwY3MgZm9yIDg1JSB2YXJpYW5jZToiLCBsZW5ndGgod2hpY2goY3Vtc3VtKHRvdC52YXIpIDw9IDg1KSkpCnBhc3RlMCgiTnVtIHBjcyBmb3IgOTAlIHZhcmlhbmNlOiIsIGxlbmd0aCh3aGljaChjdW1zdW0odG90LnZhcikgPD0gOTApKSkKcGFzdGUwKCJOdW0gcGNzIGZvciA5NSUgdmFyaWFuY2U6IiwgbGVuZ3RoKHdoaWNoKGN1bXN1bSh0b3QudmFyKSA8PSA5NSkpKQoKYGBgCgoKSHVnZSBqdW1wIGJldHdlZW4gOTAlIGFuZCA5NSUuIHdpbGwgc3RhcnQgYXQgdGhlIDk1JSwgbGlrZSBiZWZvcmUuCmBgYHtyfQpzZXVyYXQub2JqZWN0IDwtIFJ1blVNQVAoc2V1cmF0Lm9iamVjdCwgZGltcyA9IDE6MzMpCnNldXJhdC5vYmplY3QgPC0gRmluZE5laWdoYm9ycyhzZXVyYXQub2JqZWN0LCBkaW1zID0gMTozMykKZm9yKHggaW4gYygwLjUsIDEsIDEuNSwgMiwgMi41KSl7CglzZXVyYXQub2JqZWN0IDwtIEZpbmRDbHVzdGVycyhzZXVyYXQub2JqZWN0LCByZXNvbHV0aW9uID0geCkKfQpgYGAKUGxvdHRpbmcuLi4KCgpgYGB7cn0KZm9yIChtZXRhLmNvbCBpbiBjb2xuYW1lcyhzZXVyYXQub2JqZWN0QG1ldGEuZGF0YSkpewoJaWYoZ3JlcGwocGF0dGVybiA9ICgiU0NUX3Nubl9yZXMiKSwgeCA9IG1ldGEuY29sKT09VFJVRSl7CgkJbXlwbG90IDwtIERpbVBsb3Qoc2V1cmF0Lm9iamVjdCwgCgkJCQkJCQkJCQkJZ3JvdXAuYnkgPSBtZXRhLmNvbCwKCQkJCQkJCQkJCQlyZWR1Y3Rpb24gPSAidW1hcCIsIAoJCQkJCQkJCQkJCWNvbHMgPSBjb2xvclJhbXBzOjpwcmltYXJ5LmNvbG9ycyhuID0gbGVuZ3RoKGxldmVscyhzZXVyYXQub2JqZWN0QG1ldGEuZGF0YVtbbWV0YS5jb2xdXSkpKQoJCQkJCQkJCQkJCSkgKyAKCQkJZ2d0aXRsZShwYXN0ZTAoIm1zQWdnciBzY3QgZGltMzEgcmVzIiwgZ3N1YigiU0NUX3Nubl9yZXMiLCAiIiwgbWV0YS5jb2wpICkpCgkJcGxvdChteXBsb3QpCgl9Cn0KYGBgCgoKCgpgYGB7cn0Kc2F2ZVJEUyhzZXVyYXQub2JqZWN0LCBmaWxlID0gIm1zQWdncl9zY3RkaW0zMy5yZHMiKQpgYGAKCiMjIEV2YWx1YXRlIGNsdXN0ZXIgc3RhYmlsaXR5Ck11c3QgZW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGNsdXN0ZXIgc3RhYmlsaXR5LCB0aGF0IGlzLCBjZWxscyB0aGF0IHN0YXJ0IGluIHRoZSBzYW1lIGNsdXN0ZXIgdGVuZCB0byBzdGF5IGluIHRoZSBzYW1lIGNsdXN0ZXIuIElmIHlvdXIgZGF0YSBpcyBvdmVyLWNsdXN0ZXJlZCwgY2VsbHMgd2lsbCBib3VuY2UgYmV0d2VlbiBncm91cHMuCgpGb2xsb3dpbmcgW3RoaXMgdHV0b3JpYWwgYnkgTWF0dCBPLl0uaHR0cHM6Ly90b3dhcmRzZGF0YXNjaWVuY2UuY29tLzEwLXRpcHMtZm9yLWNob29zaW5nLXRoZS1vcHRpbWFsLW51bWJlci1vZi1jbHVzdGVycy0yNzdlOTNkNzJkOTIuCgojIyMgQ2x1c3RyZWUKUHJldmlvdXNseSBteSBmYXZvdXJpdGUgaGFzIGJlZW4gQ2x1c3RyZWUsIHdoaWNoIGdpdmVzIGEgbmljZSB2aXN1YWwKTkI6IEZvciBzb21lIHJlYXNvbiBgY2x1c3RyZWU6OmNsdXN0cmVlKClgIGRpZG4ndCB3b3JrLCB3aGVyZWFzIGBsaWJyYXJ5KGNsdXN0cmVlKWAgZm9sbG93ZWQgYnkgYGNsdXN0cmVlKClgIGRpZC4KCmBgYHtyIGZpZy5oZWlnaHQ9NX0KY2x1c3RyZWUoc2V1cmF0Lm9iamVjdCwgcHJlZml4ID0gIlNDVF9zbm5fcmVzLiIsIG5vZGVfY29sb3VyID0gInNjM19zdGFiaWxpdHkiKSArIAoJc2NhbGVfY29sb3JfY29udGludW91cyhsb3cgPSAncmVkMycsIGhpZ2ggPSAnd2hpdGUnKQpgYGAKCkJhc2ljYWxseSBubyBzdGFiaWxpdHkgZGlmZmVyZW5jZSBjb21wYXJlZCB0byBiZWZvcmUuCgoKCg==